int main(int argc, char **argv)
{
    char shellcode[] =
    //<_start>:
        "\x89\xe9"              //mov    %ebp,%ecx
        "\x83\xe9\x1a"          //sub    $0x1a,%ecx

        "\x31\xc0"              //xor   %eax,%eax
        "\x83\xc0\x04"          //add   $0x4,%eax       sys_write syscall
        "\x31\xdb"              //xor   %ebx,%ebx
        "\x83\xc3\x01"          //add   $0x1,%ebx       stdout

        "\x31\xd2"              //xor   %edx,%edx
        "\x83\xc2\x0d"          //add   $0xd,%edx       message string length
        "\xcd\x80"              //int   $0x80
        "\xc3"                  //ret                   return
        //string "Hello World!"
        "\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21\x0a";

    void (*func)() = (void *)shellcode;
    func();
}
